package com.phoenix.jsef.basedata.shared;

import java.util.List;
import java.util.Map;
import com.phoenix.jsef.framework.*;
import com.phoenix.jsef.jdbcutils.CommandType;
import com.phoenix.jsef.basedata.pojo.*;
import java.io.Serializable;

/**   
 * @InterfaceName:  IBizBaseDept   
 * @Description:TODO(商业实体对象:CBaseDeptEntity 对应提供的服务接口)
 * @author: 李启联
 * @date:   2019-8-6 16:41:32
 * @version V1.0     
 * @Copyright: Copyright (c) 2019
 * 申明：本内容未经作者本人同意,禁止外泄以及用于其他的商业项目.
 */
public interface IBizBaseDept {

/**
* 通用的搜索方法：得到所有的实体对象集合
* @param filter 过滤条件的Map键值对
* @return 返回查找到的COzBkHeaderEntity 实体对象集合
* @throws Exception
*/
public EntityCollection getCollection(Map<String,Object> filter) throws Exception;

/**
* 通用的搜索方法：得到所有的实体对象集合列表
* @param filter 过滤条件的Map键值对
* @return 返回查找到的COzBkHeaderEntity 实体对象集合列表
* @throws Exception
*/
public List<CBaseDeptEntity> getList(Map<String,Object> filter) throws Exception;

    /**
    * 通过slq查询语句或执行存储过程,返回对应实体集合,会自动查询并填充实体里定义的其他实体对象或集合
    * @param commandType 执行类型[SQL语句或存储过程]
    * @param commandText SQL语句或存储过程名称
    * @param obj 执行参数
    * @return
    * @throws Exception
    */
    public List<CBaseDeptEntity> getListBySql(CommandType commandType, String commandText, Object... obj) throws Exception;

    /**
    * 根据过滤条件和排序字段，得到对应页码和每页条目数的 PageInfo对象
    * @param filter 过滤条件的Map键值对
    * @param sorter 排序的Map键值对
    * @param pageIndex 显示的当前页码
    * @param pageSize 每页显示的记录条数
    * @return 分页后的数据对象集合：PageInfo对象
    * @throws Exception
    */
    public PageInfo<CBaseDeptEntity> getPageInfo(Map<String,Object> filter,Map<String,String> sorter,Integer pageIndex,Integer pageSize) throws Exception;

    /**
    * 通用的搜索方法，返回实体对象的分页对象。
    * @param parameter 查询参数对象
    * @return 查找到的实体对应的分页对象
    * @throws Exception
    */
    public PageInfo<CBaseDeptEntity> searchEntityPageInfo(AccessParameter parameter) throws Exception;

    /**
    * 通过Id查找对应的商业实体对象
    * @param id 商业实体对象的Id
    * @return 单个实体对象
    * @throws Exception
    */
    public CBaseDeptEntity getEntityById(String id) throws Exception;

    /**
    * 根据ids,批量查询实体集合
    * @param ids
    * @return 实体集合
    * @throws Exception
    */
    public List<CBaseDeptEntity> getEntityListByIds(List<? extends Serializable> ids) throws Exception;

     /**
     * 通过Id查找对应的商业实体对象的 Map数据 ,该返回结果数据结构对应于数据库中的DataRow
     * @param id 商业实体对象的Id
     * @return 单个实体对象的 Map数据
     * @throws Exception
     */
     public Map<String,Object> getMapById(String id) throws Exception;

     /**
     * 将商业实体对象插入数据库
     * @param entity 商业实体对象
     * @return  插入成功返回true, 失败返回false
     * @throws Exception
     */
     public boolean insert(CBaseDeptEntity entity) throws Exception;

     /**
     * 将商业实体对象更新到数据库(支持级联更新：需要在对应实体模型对象中标记级联更新实体对象 例： cascadeUpdateEntitys={A.class,B.class})
     * @param entity 商业实体对象
     * @return  更新成功返回true, 失败返回false
     * @throws Exception
     */
     public boolean update(CBaseDeptEntity entity) throws Exception;

     /**
     * 将实体对象选择性字段(不为空的)更新到数据库(支持级联更新：需要在对应实体模型对象中标记级联更新实体对象 例： cascadeUpdateEntitys={A.class,B.class})
     * 只更新指定实体不为空的属性到数据库中
     * @param entity 实体对象
     * @return 返回成功或失败
     */
     public boolean updateWithSelective(CBaseDeptEntity entity) throws Exception;

     /**
     * 将商业实体对象从数据库中删除 (支持级联删除：需要在对应实体模型对象中标记级联删除实体对象 例： cascadeDeleteEntitys={A.class,B.class})
     * @param entity 商业实体对象
     * @return 删除成功返回true, 失败返回false
     * @throws Exception
     */
     public boolean delete(CBaseDeptEntity entity) throws Exception;

     /**
     * 单纯的根据id的值从数据库中删除对应商业实体对象
     * @param keyValue 商业实体对象的Id
     * @return 删除成功返回true, 失败返回false
     * @throws Exception
     */
     public boolean deleteByIdForSingle(Object keyValue) throws Exception;

     /**
     * 根据ids,批量删除实体对象集合，支持递归删除
     * @param ids 要删除的实体主键值的集合列表
     * @param recursive 是否需要级联删除
     * @return 返回成功或失败
     * @throws Exception
     */
     public boolean deleteBatchIds(List<? extends Serializable> ids, boolean recursive) throws Exception;

     /**
     * 根据ids,批量删除实体对象集合，执行该操作会递归删除级联实体对象
     * @param ids 要删除的实体主键值的集合列表
     * @return 返回成功或失败
     * @throws Exception
     */
     public boolean deleteBatchIds(List<? extends Serializable> ids) throws Exception;


}